import Vue from 'vue'
import Vuex from 'vuex'
import user from './modules/user'
import app from './modules/app'
import getters from './getters'
import login from './modules/login'
Vue.use(Vuex)
const store = new Vuex.Store({
  state: {
    test: '测试vuex',
    xxx: 123
    // 基本使用:this.$store.state.属性名
    // map使用:1:导入 import {mapState} from 'vuex'  2:定义:  computed:{...mapState(['test'])} computed:{...mapState({新的名字:'原本的key'})}     3:使用: this.test
  },
  mutations: {
    setTest (state, value) {
      state.test = value
      // this===this.$store
      this.commit('logFn')
    },
    logFn () {
      window.console.log('logFn')
      // this.$store.commit('logFn')
    }
    /*
    使用:this.$store.commit('setTest',实参值)
    map使用:
        1:导入 import {mapMutations} from 'vuex'
        2:定义  methods:{...mapMutations(['方法名'])}
        3:使用  this.方法名(实参值)
    mutations方法调用mutations方法
      this===this.$store    
    */
  },
  actions: {
    /*
    基本使用:this.$store.dispatch('actions方法名',参数值)
    map使用:1:导入  import {mapActions} from 'vuex' 2:定义  methods:{...mapActions(['方法名'])}3:使用:this.方法名(实参值)
    */

    refreshTest (store) {
      /*
        store
        1:commit:调用mutations方法的
        2:state:获取本模块的state数据的
        3:getters:获取本模块的getters数据的
        4:dispatch:调用actions方法的
        5:rootGetters:根模块下的getters
        6:rootState:根模块下的state
        */
      store.dispatch('actionsLog')

      window.console.log(store.state.xxx)
      window.console.log('store', store)
      setTimeout(() => {
        //   Math.random()*999
        store.commit('setTest', Math.random() * 999)
      }, 1000)
    },
    actionsLog () {
      window.console.log('actionsLog')
    }
  },
  getters: getters,

  modules: {
    /*
     基本定义:
        1:src/store/modules//模块名.js
           export default {...数据} 
        2:src/store/index.js导入
        3:使用
     
     */
    user: user,
    app,
    login
  }
})
export default store
